/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import descricaoProduto.CadastroDescicaoProduto;
import descricaoProduto.DescricaoProduto;
import descricaoProduto.DescricaoProdutoJaCadastradoExeption;
import descricaoProduto.DescricaoProdutoNaoCadastradoException;
import descricaoProduto.RepositorioDescricaoProduto;
import java.util.List;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author Alberto
 */
public class ControladorDescricaoProduto {

    /**
     *
     */
    private RepositorioDescricaoProduto objRepositorioDescricaoProduto = null;

    /**
     *
     * @param objRepositorioProduto
     * @throws ErroAcessoRepositorioException
     */
    public ControladorDescricaoProduto(RepositorioDescricaoProduto objRepositorioDescricaoProduto) throws ErroAcessoRepositorioException {
        this.objRepositorioDescricaoProduto = objRepositorioDescricaoProduto;
    }

    /**
     * Metodo que ira cadastrar o DescricaoProduto
     *
     * @param DescricaoProduto objDescricaoProduto
     * @return void
     */
    public void cadastrar(DescricaoProduto objDescricaoProduto) throws DescricaoProdutoNaoCadastradoException, DescricaoProdutoJaCadastradoExeption, CamposObrigatoriosException, ErroAcessoRepositorioException {
        CadastroDescicaoProduto objCadastroDescicaoProduto = new CadastroDescicaoProduto(this.objRepositorioDescricaoProduto);
        
        // Validações
        if(objDescricaoProduto.getDecsricaoProduto().trim().length() < 0) throw new CamposObrigatoriosException("Descrição Produto");
        if(objDescricaoProduto.getControleFalta() == null) throw new CamposObrigatoriosException("Controle Falta");
        //if(objDescricaoProduto.getControleFalta().getQuantidadeAtual() == 0) throw new CamposObrigatoriosException("Quatidade atual");
        if(objDescricaoProduto.getControleFalta().getQuantidadeMaxima() == 0) throw new CamposObrigatoriosException("Quatidade máxima");
        if(objDescricaoProduto.getControleFalta().getQuantidadeMinima() == 0) throw new CamposObrigatoriosException("Quatidade minima");
        
        objCadastroDescicaoProduto.cadastrarAtualizar(objDescricaoProduto);

    }

    /**
     * Metodo que ira atualizar o DescricaoProduto
     *
     * @param DescricaoProduto objDescricaoProduto
     * @return void
     */
    public void atualizar(DescricaoProduto objDescricaoProduto) throws DescricaoProdutoNaoCadastradoException, DescricaoProdutoJaCadastradoExeption, CamposObrigatoriosException, ErroAcessoRepositorioException {
        CadastroDescicaoProduto objCadastroDescicaoProduto = new CadastroDescicaoProduto(this.objRepositorioDescricaoProduto);

        objCadastroDescicaoProduto.cadastrarAtualizar(objDescricaoProduto);
    }

    /**
     * Metodo que ira produrar o DescricaoProduto
     *
     * @param int idDescricaoProduto
     * @return void
     */
    public DescricaoProduto procurar(int idDescricaoProduto) throws DescricaoProdutoNaoCadastradoException, ErroAcessoRepositorioException {
        CadastroDescicaoProduto objCadastroDescicaoProduto = new CadastroDescicaoProduto(this.objRepositorioDescricaoProduto);
        
        return objCadastroDescicaoProduto.procurar(idDescricaoProduto);
    }

    /**
     * Metodo que ira verificar a existência do DescricaoProduto
     *
     * @param int idDescricaoProduto
     * @return void
     */
    public boolean existe(int idDescricaoProduto) throws ErroAcessoRepositorioException {
        CadastroDescicaoProduto objCadastroDescicaoProduto = new CadastroDescicaoProduto(this.objRepositorioDescricaoProduto);
        
        
        return objCadastroDescicaoProduto.existe(idDescricaoProduto);
    }

    /**
     * Metodo que ira listar os DescricaoProdutos
     *
     * @return Collection
     */
    public List<DescricaoProduto> listar(String strComplemento) throws Exception, ErroAcessoRepositorioException {
        CadastroDescicaoProduto objCadastroDescicaoProduto = new CadastroDescicaoProduto(this.objRepositorioDescricaoProduto);
        
        return objCadastroDescicaoProduto.listar(strComplemento);
    }

    /**
     * 
     * 
     * @param idDescricaoProduto
     * @throws DescricaoProdutoNaoCadastradoException
     * @throws ErroAcessoRepositorioException 
     */
    public void remover(int idDescricaoProduto) throws DescricaoProdutoNaoCadastradoException, ErroAcessoRepositorioException {
        CadastroDescicaoProduto objCadastroDescicaoProduto = new CadastroDescicaoProduto(this.objRepositorioDescricaoProduto);
        
        
        objCadastroDescicaoProduto.remover(idDescricaoProduto);
    }
    
    /**
     * Metodo que ira listar os DescricaoProdutos
     *
     * @return Collection
     */
    public List<DescricaoProduto> listarAtivos() throws Exception, ErroAcessoRepositorioException {
        CadastroDescicaoProduto objCadastroDescicaoProduto = new CadastroDescicaoProduto(this.objRepositorioDescricaoProduto);
        
        // retornando o resultado
        return objCadastroDescicaoProduto.listarAtivos();
    }
    
    /**
     * Metodo que ira listar os Categorias
     *
     * @return Collection
     */
    public List<DescricaoProduto> procurarPorDescricaoPorSubCategoria(String descricaoProduto, int idSubCategoria) throws CamposObrigatoriosException, Exception, ErroAcessoRepositorioException {
        CadastroDescicaoProduto objCadastroDescicaoProduto = new CadastroDescicaoProduto(this.objRepositorioDescricaoProduto);
        
        if(descricaoProduto.trim().length() == 0 && idSubCategoria == 0) throw new CamposObrigatoriosException("Favor Preencher Descrição Produto ou Selecionar uma SubCategoria");
        
        // retornando o resultado
        return objCadastroDescicaoProduto.procurarPorDescricaoPorSubCategoria(descricaoProduto, idSubCategoria);
    }
    
    /**
     * Metodo que ira listar os Categorias
     *
     * @return Collection
     */
    public List<DescricaoProduto> buscarDescricaoProdutoBaixoEstoque(String descricaoProduto, int idSubCategoria) throws CamposObrigatoriosException, Exception, ErroAcessoRepositorioException {
        CadastroDescicaoProduto objCadastroDescicaoProduto = new CadastroDescicaoProduto(this.objRepositorioDescricaoProduto);
        
        if(descricaoProduto.trim().length() == 0 && idSubCategoria == 0) throw new CamposObrigatoriosException("Favor Preencher Descrição Produto ou Selecionar uma SubCategoria");
        
        // retornando o resultado
        return objCadastroDescicaoProduto.listarDescricaoProdutoBaixoEstoque(descricaoProduto, idSubCategoria);
    }
    
    
    /**
     * Metodo que ira listar os DescricaoProdutos QUE ESTEJAM necessitando ser repostos
     *
     * @return Collection
     */
    public List<DescricaoProduto> listarDescricaoProdutoBaixoEstoque(String descricaoProduto, int idSubCategoria) throws Exception, ErroAcessoRepositorioException {
        CadastroDescicaoProduto objCadastroDescicaoProduto = new CadastroDescicaoProduto(this.objRepositorioDescricaoProduto);
        
        // retornando o resultado
        return objCadastroDescicaoProduto.listarDescricaoProdutoBaixoEstoque(descricaoProduto, idSubCategoria);
    }
}